package com.paul.sys.util;


public class DistanceUtil {
//	private static Log log = LogFactory.getLog(DistanceUtil.class);
//
//	// 五十公里。
//	private static long DISTANCE50 = 5000000;
//	private static long DISTANCE100 = 10000000;
//
//	private static final double R = 6378136.49;
//	private static final double PI = Math.PI;
//	private static final double PI_m_R = R * PI;
//	private static final double PI_d_90 = PI / 90;
//	private static final double PI_m_R_d_180 = R * PI / 180;
//
//	// 获得两点间距离
//	private static long getDistance(double lon1, double lat1, double lon2, double lat2) {
//		//double R = 6378136.49;
//		//double PI = Math.PI;
//		double d, y, x;
//		//x = (lon2 - lon1) * PI * R * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
//		x = (lon2 - lon1) * PI_m_R_d_180 * Math.cos((lat1 + lat2) * PI_d_90) ;
//		y = (lat2 - lat1) * PI_m_R_d_180;
//		d = Math.sqrt(x * x + y * y);
//		return Math.round(d * 100);
//	}
//	// 获得附近五十公里的所有已经审核通过网点
//	private static ArrayList<YdBranch> getNearBranches(Float longitude, Float latitude,String state) {
//
//		ArrayList<YdBranch> al = new ArrayList<YdBranch>();
//		for (YdBranch branch : GisCache.getInstance().branchs()) {
//			if (state.equals(YdOrgBranch.State_Auditing)) {
//				if((branch.getState().equals(YdOrgBranch.State_Released)||branch.getState().equals(YdOrgBranch.State_CompanyReleased))||branch.getState().equals(YdOrgBranch.State_Auditing)){
//					if(getBranch(longitude, latitude,branch)){
//						al.add(branch);
//					}
//
//				}
//			}else if((state.equals(YdOrgBranch.State_CompanyReleased))){
//				if((branch.getState().equals(YdOrgBranch.State_Released))||(branch.getState().equals(YdOrgBranch.State_CompanyReleased))){
//					if(getBranch(longitude, latitude,branch)){
//						al.add(branch);
//					}
//				}
//			}else if((state.equals(YdOrgBranch.State_Released))){
//				if((branch.getState().equals(YdOrgBranch.State_Released))){
//					if(getBranch(longitude, latitude,branch)){
//						al.add(branch);
//					}
//			    }
//			}
//
//		}
//		return al;
//	}
//
//
//
//
//	// 获取50公里内与当前网点派送范围重复的网点
//	public    static ArrayList<YdBranch> getCoincideBranches(String markeXY, ArrayList<ArrayList<YdGeometryVector>> serverListArr,String state) {
//		Float longitude = Float.parseFloat(markeXY.split("_")[0]);
//		Float latitude = Float.parseFloat(markeXY.split("_")[1]);
//
//		ArrayList<YdBranch> nearBranches = getNearBranches(longitude, latitude,state);
//	//	System.out.println("branch......."+nearBranches.size());
//		ArrayList<YdBranch> al = new ArrayList<YdBranch>();
//		if (serverListArr.size() == 0 || nearBranches == null || nearBranches.size() == 0) {
//			return al;
//		}
//		nextBranch:for (YdBranch branch : nearBranches) {
//			for(ArrayList<YdGeometryVector> gvs1:serverListArr) {
//				List<YdGeometry> geos = branch.getServerGeos();
//				for(YdGeometry geo:geos){
//				    List<YdGeometryVector> geoVectros = geo.getGeometryVectors();
//					if (gvs1==null ||geoVectros==null|| isPolygonCoincide(gvs1, geoVectros)) {
//						al.add(branch);
//						continue nextBranch;
//					}
//				}
//			}
//		}
//		return al;
//	}
//
//	// 获取50公里内与当前网点派送范围重复的网点
//		public    static ArrayList<YdBranch> getCoincideBranchesForCheck(String markeXY, ArrayList<ArrayList<YdGeometryVector>> serverListArr,String state) {
//			Float longitude = Float.parseFloat(markeXY.split("_")[0]);
//			Float latitude = Float.parseFloat(markeXY.split("_")[1]);
//
//			ArrayList<YdBranch> nearBranches = getNearBranchesForCheck(longitude, latitude, state);
//			ArrayList<YdBranch> al = new ArrayList<YdBranch>();
//			if (serverListArr.size() == 0 || nearBranches == null || nearBranches.size() == 0) {
//				return al;
//			}
//			nextBranch:for (YdBranch branch : nearBranches) {
//				for(ArrayList<YdGeometryVector> gvs1:serverListArr) {
//					List<YdGeometry> geos = branch.getServerGeos();
//					for(YdGeometry geo:geos){
//					    List<YdGeometryVector> geoVectros = geo.getGeometryVectors();
//						if (gvs1==null ||geoVectros==null||isPolygonCoincide(gvs1, geoVectros)) {
//							al.add(branch);
//							continue nextBranch;
//						}
//					}
//				}
//			}
//			return al;
//		}
//
//	public static ArrayList<YdBranch> getCircleBranches(String lngX, String latY,Double radius) {
//		ArrayList<YdBranch> al = new ArrayList<YdBranch>();
//		for (YdBranch branch : GisCache.getInstance().branchs()) {
//			if (branch != null && branch.getPositionGeo() != null && branch.getPositionGeo().getGeometryVectors() != null && branch.getPositionGeo().getGeometryVectors().size() > 0
//						&& (YdOrgBranch.State_CompanyReleased.equals(branch.getState()) || YdOrgBranch.State_Auditing.equals(branch.getState()) || YdOrgBranch.State_Released.equals(branch.getState()))) {
//
//				Double lng = Double.parseDouble(String.valueOf(branch.getPositionGeo().getGeometryVectors().get(0).getLongitude()));
//				Double lat = Double.parseDouble(String.valueOf(branch.getPositionGeo().getGeometryVectors().get(0).getLatitude()));
//					if (lng != null && lat != null) {
//						long distance = getDistance(Double.parseDouble(lngX), Double.parseDouble(latY), lng, lat);
//						//System.out.println(distance+"......."+Double.valueOf(radius)+"....."+(distance<Double.valueOf(radius)));
//
//						if (distance < radius) {
//							al.add(branch);
//						}
//					}
//
//
//			}
//		}
//		return al;
//	}
//
//    //判断是否有重复区域
// 	public static boolean haveRepeatArea(List<ArrayList<YdGeometryVector>> arrays) {
// 		for(int i=0;i<arrays.size()-1;i++){
// 			ArrayList<YdGeometryVector> gvs1 = arrays.get(i);
// 			ArrayList<YdGeometryVector> gvs2 = arrays.get(i+1);
// 			if(isPolygonCoincide(gvs1,gvs2)){
// 				return true;
// 			}
// 		}
//		return false;
//
//	}
//
//	public  static boolean isIntersect( ArrayList<ArrayList<YdGeometryVector>> areaLists) {
//		if (areaLists.size() > 0) {
//			Iterator<ArrayList<YdGeometryVector>> it = areaLists.iterator();
//			while (it.hasNext()){
//				if(isSelfIntersect(it.next())) {
//					return true;
//				}
//			}
//		}
//		return false;
//	}
//
//	//判断多边形是否自相交，如自相交 返回true，否则为false
//	private static boolean isSelfIntersect(List<YdGeometryVector> gvs) {
//		if (gvs== null || gvs.size() <=3) {
//			return false;
//		} else {
//			ArrayList<Line2D.Double> lines = getLines(gvs);
//			for (int i = 0;i<lines.size()-2;i++) {
//				Line2D.Double curLine = lines.get(i);
//				for (int j = i+2;j<lines.size();j++) {
//					if (!(i == 0 && j == lines.size() -1)) {
//						Line2D.Double nextLine = lines.get(j);
//						if (curLine.intersectsLine(nextLine)) {
//							return true;
//						}
//					}
//				}
//			}
//		}
//		return false;
//	}
//
//
//	//获得一个多边形所有线段，
//	private static ArrayList<Line2D.Double> getLines(List<YdGeometryVector> gvs) {
//		Collections.sort(gvs, new Comparator<YdGeometryVector>() {
//			public int compare(YdGeometryVector g1, YdGeometryVector g2) {
//				if (g1 != null && g2!= null && g1.getOrdercode() > g2.getOrdercode()) {
//					return 0;
//				} else {
//					return 1;
//				}
//			}
//		});
//		ArrayList<Line2D.Double> lines = new ArrayList<Line2D.Double>();
//		for(int i = 0;i< gvs.size();i++) {
//			YdGeometryVector g1 = gvs.get(i);
//			YdGeometryVector g2;
//			if (i == gvs.size()-1) {
//				g2 = gvs.get(0);
//			} else {
//				g2 = gvs.get(i+1);
//			}
//			Double x1 = Double.parseDouble(String.valueOf(g1.getLongitude()));
//			Double y1 = Double.parseDouble(String.valueOf(g1.getLatitude()));
//			Double x2 = Double.parseDouble(String.valueOf(g2.getLongitude()));
//			Double y2 = Double.parseDouble(String.valueOf(g2.getLatitude()));
//
//			Line2D.Double curLine = new Line2D.Double(x1,y1,x2,y2);
//			lines.add(curLine);
//		}
//		return lines;
//	}
//
//
//
//
//	// 将页面传过来的派送区域字符串转换为JAVA对象。
//	public static  ArrayList<ArrayList<YdGeometryVector>> getGeometryVectors(String areaLngLat) {
//		ArrayList<ArrayList<YdGeometryVector>> result = new  ArrayList<ArrayList<YdGeometryVector>>();
//		if (areaLngLat == null || "".equals(areaLngLat.trim())) {
//			return result;
//		}
//		String[] areaLngLats = areaLngLat.split(";");
//		for (int i = 0; i < areaLngLats.length; i++) {
//			String[] areaXYs = areaLngLats[i].split(",");
//			ArrayList<YdGeometryVector> list = new ArrayList<YdGeometryVector>();
//			for(int j=0;j<areaXYs.length;j++){
//				String[] areaXY = areaXYs[j].split("_");
//				Float longitude = Float.valueOf(areaXY[0]);
//				Float latitude = Float.valueOf(areaXY[1]);
//				Integer orderCode = Integer.valueOf(areaXY[2]);
//				YdGeometryVector gv = new YdGeometryVector();
//				gv.setLongitude(longitude);
//				gv.setLatitude(latitude);
//				gv.setOrdercode(orderCode);
//				list.add(gv);
//			}
//			result.add(list);
//		}
//
//		return result;
//	}
//
//
//	// 判断一个点是否在一个多边形里面
//	private static boolean isPolygonContaisPoint(List<YdGeometryVector> gvs, Double x,Double y) {
//		Polygon p1 = new Polygon();
//		for (YdGeometryVector gv : gvs) {
//			p1.addPoint(getInt(String.valueOf(gv.getLongitude())), getInt(String.valueOf(gv.getLatitude())));
//		}
//		if (p1.contains(new Point(getInt(String.valueOf(x)), getInt(String.valueOf(y))))) {
//			return true;
//		} else {
//			return false;
//		}
//	}
//
//	// 判断一个多边形是否在另一个多边形里面
//	private static boolean isPolygonContaisPolygon(List<YdGeometryVector> outside, List<YdGeometryVector> inside) {
//		Polygon p1 = new Polygon();
//		for (YdGeometryVector gv : outside) {
//			p1.addPoint(getInt(String.valueOf(gv.getLongitude())), getInt(String.valueOf(gv.getLatitude())));
//		}
//		for (YdGeometryVector gv : inside) {
//			int tempX = getInt(String.valueOf(gv.getLongitude()));
//			int tempY = getInt(String.valueOf(gv.getLatitude()));
//			if (!p1.contains(new Point(tempX, tempY))) {
//				return false;
//			}
//		}
//		return true;
//	}
//	// 判断多边形是否重合
//	private static boolean isPolygonCoincide(List<YdGeometryVector> gvs1, List<YdGeometryVector> gvs2) {
//		ArrayList<Line2D.Double> al1 = getLines(gvs1);
//		ArrayList<Line2D.Double> al2 = getLines(gvs2);
//		//如果两个图形中有线段相交，则重合。
//		for(Line2D.Double line1:al1) {
//			for (Line2D.Double line2:al2) {
//				if (line1.intersectsLine(line2)) {
//					return true;
//				}
//			}
//		}
//		//如果没有线段相交，但一个图形包含在另个图形里面也重合。
//		if (isPolygonContaisPolygon(gvs1,gvs2) || isPolygonContaisPolygon(gvs2,gvs1) ) {
//			return true;
//		}
//		return false;
//	}
//
//
//	private static int getInt(String dou) {
//		Double d = new Double(dou);
//		return new Double(d * 60 * 10000).intValue();
//	}
//
//	public static void main(String[] args) {
//		Double a = 10.2222d;
//		Long b = 10l;
//		System.out.println(a<b);
//	}
//    public static boolean getBranch(Float longitude,Float latitude,YdBranch branch){
//    	boolean flag = false;
//		if(branch.getPositionGeo()!=null){
//			try{
//				if(branch.getPositionGeo().getGeometryVectors()!=null||branch.getPositionGeo().getGeometryVectors().size()!=0){
//					YdGeometryVector geoVec = branch.getPositionGeo().getGeometryVectors().get(0);
//					if(geoVec!=null){
//						Float lng = geoVec.getLongitude();
//						Float lat = geoVec.getLatitude();
//						if (lng != null && lat != null) {
//							long distance = getDistance(longitude, latitude, lng, lat);
//							if (distance < DISTANCE50) {
//								flag = true;
//							}
//						}
//					}
//				}
//
//			}catch(Exception e){
//				log.info(e.getMessage());
//			}
//
//
//		}
//		return flag;
//    }
	   
}
